/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package MathLib.HashMatrix;

import java.util.ArrayList;

/**
 *
 * @author marko
 */
public class Array implements IRow{
      // массив индексов (номера ненулевых ячеек)
      private ArrayList<Integer> indexes = new ArrayList<Integer>();
      // массив значений ячеек
      private ArrayList<Double> values = new ArrayList<Double>();

      public void setValue(int num, double value){
            int i = indexes.indexOf(num);
          // если записывается 0-вое значение, то удаляем данную ячейку
            if (value==0){
                  if (i!=-1)
                  {
                        indexes.remove(i);
                        values.remove(i);
                  }
                  return;
            }
            // если значение не 0-вое, то перезаписываем или добавляем ячейку
            if (i!=-1){
                  values.set(i, value);
            }else{
                  indexes.add(num);
                  values.add(value);
            }
      }

      public void addValue(int num, double value){
            int i = indexes.indexOf(num);
            if (i!=-1){
                  values.set(i,values.get(i)+value);
            }else{
                  indexes.add(num);
                  values.add(value);
            }
      }

      public double getValue(int num){
            int i = indexes.indexOf(num);
            if (i!=-1) return values.get(i);
            return 0;
      }

      public void getValues(int[] indexes, double[] values){
         //indexes = (int[])this.indexes.toArray(indexes);
         //values = (double[])this.values.toArray();
            indexes = new int[this.indexes.size()];
            values = new double[this.values.size()];
            for(int i=this.indexes.size()-1;i>-1;i-- ){
                indexes[i] = this.indexes.get(i);
                values[i] = this.values.get(i);
            }
      }

    public void getValues(ArrayList<Integer> indexes, ArrayList<Double> values) {
        indexes = (ArrayList<Integer>) this.indexes.clone();
        values = (ArrayList<Double>) this.values.clone();
    }

    public ArrayList<Double> getValues() {
        return (ArrayList<Double>) this.values.clone();
    }

    public ArrayList<Integer> getIndexes() {
        return (ArrayList<Integer>) this.indexes.clone();
    }

}
